草庐IT

带指针的 C++ vector

全部标签

c++ - 排序 vector 上 std::lower_bound 的时间复杂度

我正在研究http://www.cplusplus.com/reference/algorithm/upper_bound/的std::upper_bound我发现这可能会在非随机访问迭代器上以线性时间运行。我需要将其用于排序vector。现在我不知道什么是非随机访问迭代器以及它是否会在排序后的vector上以对数时间运行。谁能帮我解决这个问题。 最佳答案 §23.3.6.1[vector.overview]/p1:Avectorisasequencecontainerthatsupportsrandomaccessiterator

c++ - 如何传递特征矩阵行引用,将其视为 vector ?

我有一个对Vector引用进行操作的函数,例如voidauto_bias(constEigen::VectorXf&v,Eigen:Ref>out){out=...}有时我需要让这个函数在Matrix行上运行。现在,因为默认的内存布局是列优先的,所以我不能只将行指向的数据映射到vector中。那么,如何将行传递给上述函数以便我可以对其进行操作?不太好的解决方案是有一个临时vector,例如VectorXftmpVec=matrix.row(5);auto_bias(otherVector,tmpVec);matrix.row(5)=tmpVec;但是有没有办法直接做呢?

c++ - 没有 "predicate"的对 vector 上的 max_element

我想找到pairs的vector的最大元素。我的标准是:最大元素是一对中第二个值最高的元素。我这样做了:automax_angle=std::max_element(begin(angles),end(angles),[](conststd::pair&left,conststd::pair&right){returnleft.second不写谓词是否可以做到?由于它是标准结构,是否有更简单的配对方法? 最佳答案 不,你不能,因为默认情况下std::pair是按字典顺序比较的,这意味着从左到右逐元素。因此,您的解决方案是您可以拥有的

c++ - 如何从一个 vector 计算坐标系?

如何只给定一个vector来创建坐标系?(左手、右手、本地或不同空间)我正在寻找只给定一个vector的局部坐标系统算法:原因:1)Z可能是表面法线,那么X和Yvector就是切线和副切线vector2)另一个原因是光线追踪:对光源进行采样。给定一个交点,从该点构建局部坐标系,然后追踪光线到光的形状。Vector3Z={0.0f,0.0f,1.0f};//given//fillxandyCreateXHandedCoordinateSystem(Vector3*X,Vector3*Y,constVector3&Z){//implementationgoeshere..//evaluat

c++ - 如何从 std::vector 的末尾删除几个元素?

假设我有一个std::vector整数:std::vectorv;v包含100个元素,我想删除最后10个元素。我可以想到这个解决方案:v.erase(v.end()-10,v.end());还有更好的吗? 最佳答案 你可以试试这个:v.resize(v.size()-10);但是,您需要根据您的方法对其进行基准测试。我不确定它更好,甚至可能完全相同。您也可以在调整大小之前检查大小:if(v.size()>=10){v.resize(v.size()-10);}编辑:Resize删除vector末尾的元素:http://www.cpl

c++ - 来自 Boost.Spirit 语法的属性:来自 std:vector of boost::variant 的错误

我有一个用于读取棋盘游戏位置描述的工作解析器(国际跳棋,officialgrammar):#include#includenamespacex3=boost::spirit::x3;autoconstcolon=x3::lit(':');autoconstcomma=x3::lit(',');autoconstdash=x3::lit('-');autoconstdot=x3::lit('.');autoconstking=x3::char_('K');autoconstcolor=x3::char_("BW");autoconstnum_sq=x3::int_;autoconstnu

c++ - 是否可以使用填充构造函数创建 std::vector<std::unique_ptr<Bar>> ?

我有一个Foo类,其成员变量类型为std::vector>,我想填写这个类的构造函数的初始化列表。这可能吗?我希望可以使用vector的填充构造函数,就像这样Foo::Foo(intn):vector>(n,unique_ptr(newBar)){}但我认为这需要std::unique_ptr的复制构造函数,它被删除了(因为它应该被删除)(unique_ptr(constunique_ptr&)=delete)。有没有更好的方法来解决这个问题? 最佳答案 既然不可复制,那就搬吧!硬编码对象的解决方案:#include#include

c++ - 指向成员函数语法的奇怪指针

我了解如何声明函数的类型:typedefvoid(typedef_void_f)();//typedef_void_fisvoid()usingalias_void_f=void();//alias_void_fisvoid()它可以用来声明函数指针:voidfunction(){std::cout对于成员函数指针,语法稍微复杂一些:structS{voidfunction(){std::cout这是我对C++中函数指针的理解,我认为这已经足够了。但是在p0172r0technicalpaper我发现了一个我不熟悉的语法:structhost{intfunction()const;};

c++ - 从 const 指针创建用户类的 const 对象

是否可以强制编译器在我的类中传播常量限定符,以便为构造函数提供常量指针?考虑以下代码:structT{T(int*a,int*b):a(a),b(b){}int*a;int*b;};inta=1,b=2;constint*aRef=&a;constint*bRef=&b;constTobj(aRef,bRef);//error这显然是不允许的,因为构造函数接受int*,而不是constint*。有什么方法可以达到同样的效果,如果不打算修改const对象中的a和b处的数据类T?编辑下面是一个更接近实际问题的稍微复杂的例子。想象一下,我按顺序传递了一些大型int[]数组(例如,连续1000

c++ SFINAE 检查指向类的指针中的方法

我有这样的代码:templateclassDiskFileFlush{TABLELOADER*_loader;public:voidprocess(){//Iwanttocallthis,//onlyifloader->refresh()exists.notifyLoader();}boolnotifyLoader(){if(loader!=nullptr)returnloader->refresh();returnfalse;}};只有loader->refresh()存在时,我才想调用notifyLoader()。我也使用void作为默认类型,有没有更好的方法来做同样的事情?